/**
 *
 */
import OpenApi;
import OpenApi.OpenApiUtil;

extends OpenApi;


init(config: OpenApiUtil.Config){
  super(config);
  @endpointRule = 'regional';
  @endpointMap = {
    'cn-qingdao' = 'antiddos.aliyuncs.com',
    'cn-beijing' = 'antiddos.aliyuncs.com',
    'cn-zhangjiakou' = 'antiddos-openapi.cn-zhangjiakou.aliyuncs.com',
    'cn-huhehaote' = 'antiddos-openapi.cn-huhehaote.aliyuncs.com',
    'cn-wulanchabu' = 'antiddos-openapi.cn-wulanchabu.aliyuncs.com',
    'cn-hangzhou' = 'antiddos.aliyuncs.com',
    'cn-shanghai' = 'antiddos.aliyuncs.com',
    'cn-nanjing' = 'antiddos-openapi.cn-hangzhou-cloudstone.aliyuncs.com',
    'cn-shenzhen' = 'antiddos.aliyuncs.com',
    'cn-heyuan' = 'antiddos-openapi.cn-heyuan.aliyuncs.com',
    'cn-guangzhou' = 'antiddos-openapi.cn-guangzhou.aliyuncs.com',
    'cn-chengdu' = 'antiddos-openapi.cn-chengdu.aliyuncs.com',
    'cn-hongkong' = 'antiddos.aliyuncs.com',
    'ap-northeast-1' = 'antiddos-openapi.ap-northeast-1.aliyuncs.com',
    'ap-northeast-2' = 'antiddos-openapi.ap-northeast-2.aliyuncs.com',
    'ap-southeast-1' = 'antiddos.aliyuncs.com',
    'ap-southeast-2' = 'antiddos-openapi.ap-southeast-2.aliyuncs.com',
    'ap-southeast-3' = 'antiddos-openapi.ap-southeast-3.aliyuncs.com',
    'ap-southeast-5' = 'antiddos-openapi.ap-southeast-5.aliyuncs.com',
    'ap-southeast-6' = 'antiddos-openapi.ap-southeast-6.aliyuncs.com',
    'us-east-1' = 'antiddos.aliyuncs.com',
    'us-west-1' = 'antiddos.aliyuncs.com',
    'eu-west-1' = 'antiddos-openapi.eu-west-1.aliyuncs.com',
    'eu-central-1' = 'antiddos-openapi.eu-central-1.aliyuncs.com',
    'ap-south-1' = 'antiddos-openapi.ap-south-1.aliyuncs.com',
    'me-east-1' = 'antiddos-openapi.me-east-1.aliyuncs.com',
    'cn-shanghai-finance-1' = 'antiddos.aliyuncs.com',
    'cn-shenzhen-finance-1' = 'antiddos.aliyuncs.com',
    'cn-north-2-gov-1' = 'antiddos.aliyuncs.com',
    'ap-northeast-2-pop' = 'antiddos.aliyuncs.com',
    'cn-beijing-finance-1' = 'antiddos.aliyuncs.com',
    'cn-beijing-finance-pop' = 'antiddos.aliyuncs.com',
    'cn-beijing-gov-1' = 'antiddos.aliyuncs.com',
    'cn-beijing-nu16-b01' = 'antiddos.aliyuncs.com',
    'cn-edge-1' = 'antiddos.aliyuncs.com',
    'cn-fujian' = 'antiddos.aliyuncs.com',
    'cn-haidian-cm12-c01' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-bj-b01' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-finance' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-internal-prod-1' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-internal-test-1' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-internal-test-2' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-internal-test-3' = 'antiddos.aliyuncs.com',
    'cn-hangzhou-test-306' = 'antiddos.aliyuncs.com',
    'cn-hongkong-finance-pop' = 'antiddos.aliyuncs.com',
    'cn-huhehaote-nebula-1' = 'antiddos.aliyuncs.com',
    'cn-qingdao-nebula' = 'antiddos.aliyuncs.com',
    'cn-shanghai-et15-b01' = 'antiddos.aliyuncs.com',
    'cn-shanghai-et2-b01' = 'antiddos.aliyuncs.com',
    'cn-shanghai-inner' = 'antiddos.aliyuncs.com',
    'cn-shanghai-internal-test-1' = 'antiddos.aliyuncs.com',
    'cn-shenzhen-inner' = 'antiddos.aliyuncs.com',
    'cn-shenzhen-st4-d01' = 'antiddos.aliyuncs.com',
    'cn-shenzhen-su18-b01' = 'antiddos.aliyuncs.com',
    'cn-wuhan' = 'antiddos.aliyuncs.com',
    'cn-yushanfang' = 'antiddos.aliyuncs.com',
    'cn-zhangbei' = 'antiddos.aliyuncs.com',
    'cn-zhangbei-na61-b01' = 'antiddos.aliyuncs.com',
    'cn-zhangjiakou-na62-a01' = 'antiddos-openapi.cn-zhangjiakou.aliyuncs.com',
    'cn-zhengzhou-nebula-1' = 'antiddos.aliyuncs.com',
    'eu-west-1-oxs' = 'antiddos.aliyuncs.com',
    'rus-west-1-pop' = 'antiddos.aliyuncs.com',
  };

  checkConfig(config);
  @endpoint = getEndpoint('antiddos-public', @regionId, @endpointRule, @network, @suffix, @endpointMap, @endpoint);
}

function getEndpoint(productId: string, regionId: string, endpointRule: string, network: string, suffix: string, endpointMap: map[string]string, endpoint: string) throws: string{
  if (!$isNull(endpoint)) {
    return endpoint;
  }
  
  if (!$isNull(endpointMap) && !$isNull(endpointMap[regionId])) {
    return endpointMap[regionId];
  }
  return OpenApiUtil.getEndpointRules(productId, regionId, endpointRule, network, suffix);
}

model DescribeBgpPackByIpRequest {
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset to query.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  ip?: string(name='Ip', description='The IP address of the asset to query.

>  You can call the [DescribeInstanceIpAddress](https://help.aliyun.com/document_detail/472620.html) operation to query the IDs of Elastic Compute Service (ECS) instances, Server Load Balancer (SLB) instances, and elastic IP addresses (EIPs) within the current Alibaba Cloud account.

This parameter is required.', example='118.31.XX.XX'),
}

model DescribeBgpPackByIpResponseBody = {
  code?: int32(name='Code', description='The HTTP status code of the request.

For more information about status codes, see [Common parameters](https://help.aliyun.com/document_detail/118841.html).', example='200'),
  ddosbgpInfo?: {
    baseThreshold?: int32(name='BaseThreshold', description='The basic protection threshold of the instance. Unit: Gbit/s.', example='20'),
    ddosbgpInstanceId?: string(name='DdosbgpInstanceId', description='The ID of the instance.', example='ddosbgp-cn-n6w1r7nz****'),
    elasticThreshold?: int32(name='ElasticThreshold', description='The burstable protection threshold of the instance. Unit: Gbit/s.', example='301'),
    expireTime?: long(name='ExpireTime', description='The expiration time of the instance. The value is a UNIX timestamp. Unit: milliseconds.', example='1640448000000'),
    ip?: string(name='Ip', description='The IP address of the asset.', example='118.31.XX.XX'),
  }(name='DdosbgpInfo', description='The configurations of the instance that is associated with the asset.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='E46A08E4-A1CD-5BE9-B580-C4D6E9BC5484'),
  success?: boolean(name='Success', description='Indicates whether the request was successful. Valid values:

*   **true**: yes
*   **false**: no', example='true'),
}

model DescribeBgpPackByIpResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeBgpPackByIpResponseBody(name='body'),
}

/**
 * @summary Queries the configurations of the Anti-DDoS Origin instance that is associated with an asset. The asset is assigned a public IP address.
 *
 * @description You can call the DescribeBgpPackByIp operation to query the configurations of the Anti-DDoS Origin instance that is associated with an asset. The configurations include the basic protection threshold, burstable protection threshold, and expiration time.
 * ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeBgpPackByIpRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeBgpPackByIpResponse
 */
async function describeBgpPackByIpWithOptions(request: DescribeBgpPackByIpRequest, runtime: $RuntimeOptions): DescribeBgpPackByIpResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.ip)) {
    query['Ip'] = request.ip;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeBgpPackByIp',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the configurations of the Anti-DDoS Origin instance that is associated with an asset. The asset is assigned a public IP address.
 *
 * @description You can call the DescribeBgpPackByIp operation to query the configurations of the Anti-DDoS Origin instance that is associated with an asset. The configurations include the basic protection threshold, burstable protection threshold, and expiration time.
 * ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeBgpPackByIpRequest
 * @return DescribeBgpPackByIpResponse
 */
async function describeBgpPackByIp(request: DescribeBgpPackByIpRequest): DescribeBgpPackByIpResponse {
  var runtime = new $RuntimeOptions{};
  return describeBgpPackByIpWithOptions(request, runtime);
}

model DescribeCapRequest {
  begTime?: long(name='BegTime', description='The start time of the DDoS attack event. The value is a UNIX timestamp. Unit: milliseconds.

> You can call the [DescribeDdosEventList](https://help.aliyun.com/document_detail/354236.html) operation to query the start time of each DDoS attack event that occurred on an asset.

This parameter is required.', example='1637812279000'),
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset that is under DDoS attacks. The asset is assigned a public IP address.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  instanceId?: string(name='InstanceId', description='The ID of the asset that is under DDoS attacks.

> You can call the [DescribeInstance](https://help.aliyun.com/document_detail/354191.html) operation to query the IDs of ECS instances, SLB instances, and EIPs within the current Alibaba Cloud account.

This parameter is required.', example='i-bp10bclrt56fblts****'),
  instanceType?: string(name='InstanceType', description='The type of the asset that is under DDoS attacks. The asset is assigned a public IP address. Valid values:

*   **ecs**: an Elastic Compute Service (ECS) instance.
*   **slb**: a Server Load Balancer (SLB) instance.
*   **eip**: an elastic IP address (EIP).
*   **ipv6**: an IPv6 gateway.
*   **swas**: a simple application server.
*   **waf**: a Web Application Firewall (WAF) instance of the Exclusive edition.
*   **ga_basic**: a Global Accelerator (GA) instance.

This parameter is required.', example='ecs'),
  internetIp?: string(name='InternetIp', description='The public IP address of the asset that is under DDoS attacks.', example='121.199.XX.XX'),
}

model DescribeCapResponseBody = {
  capUrl?: {
    url?: string(name='Url', description='The download link to the traffic data.', example='http://beaver-pack****.oss-cn-hangzhou.aliyuncs.com/ddos-2021112511-121.89.XX.XX.cap?Expires=1637824408&OSSAccessKeyId=LTAIXu2lJhw3****&Signature=KKSzOMSUajtwcqfqxkU1nK69d4****'),
  }(name='CapUrl', description='The download link to the traffic data that is captured when a DDoS attack event occurs.'),
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='C728D7E9-9A39-52E0-966B-5C33118BDBB0'),
}

model DescribeCapResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeCapResponseBody(name='body'),
}

/**
 * @summary Queries the download link to the traffic data that is captured when a DDoS attack event occurs.
 *
 * @description You can call the DescribeCap operation to query the download link to the traffic data that is captured when a DDoS attack event occurs. You can download the traffic data from the download link and use the data as evidence.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeCapRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeCapResponse
 */
async function describeCapWithOptions(request: DescribeCapRequest, runtime: $RuntimeOptions): DescribeCapResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.begTime)) {
    query['BegTime'] = request.begTime;
  }
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.internetIp)) {
    query['InternetIp'] = request.internetIp;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeCap',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the download link to the traffic data that is captured when a DDoS attack event occurs.
 *
 * @description You can call the DescribeCap operation to query the download link to the traffic data that is captured when a DDoS attack event occurs. You can download the traffic data from the download link and use the data as evidence.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeCapRequest
 * @return DescribeCapResponse
 */
async function describeCap(request: DescribeCapRequest): DescribeCapResponse {
  var runtime = new $RuntimeOptions{};
  return describeCapWithOptions(request, runtime);
}

model DescribeDdosCountRequest {
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset to query.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  instanceType?: string(name='InstanceType', description='The type of the asset to query. Valid values:

*   **ecs**: Elastic Compute Service (ECS) instances.
*   **slb**: Server Load Balancer (SLB) instances.
*   **eip**: elastic IP addresses (EIPs).
*   **ipv6**: IPv6 gateways.
*   **swas**: simple application servers.
*   **waf**: Web Application Firewall (WAF) instances of the Exclusive edition.
*   **ga_basic**: Global Accelerator (GA) instances.

This parameter is required.', example='ecs'),
}

model DescribeDdosCountResponseBody = {
  ddosCount?: {
    blackholeCount?: int32(name='BlackholeCount', description='The number of assets for which blackhole filtering is triggered.', example='0'),
    defenseCount?: int32(name='DefenseCount', description='The number of assets for which traffic scrubbing is triggered.', example='4'),
    instacenCount?: int32(name='InstacenCount', description='The total number of assets.', example='0'),
  }(name='DdosCount', description='The number of assets that are under DDoS attacks.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='7D66C762-324E-51CE-B461-2007996087B2'),
}

model DescribeDdosCountResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeDdosCountResponseBody(name='body'),
}

/**
 * @summary Queries the number of assets that are under DDoS attacks in a specific region. The assets are assigned public IP addresses.
 *
 * @description ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosCountRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeDdosCountResponse
 */
async function describeDdosCountWithOptions(request: DescribeDdosCountRequest, runtime: $RuntimeOptions): DescribeDdosCountResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeDdosCount',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the number of assets that are under DDoS attacks in a specific region. The assets are assigned public IP addresses.
 *
 * @description ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosCountRequest
 * @return DescribeDdosCountResponse
 */
async function describeDdosCount(request: DescribeDdosCountRequest): DescribeDdosCountResponse {
  var runtime = new $RuntimeOptions{};
  return describeDdosCountWithOptions(request, runtime);
}

model DescribeDdosCreditRequest {
  ddosRegionId?: string(name='DdosRegionId', description='The ID of the region.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
}

model DescribeDdosCreditResponseBody = {
  ddosCredit?: {
    blackholeTime?: int32(name='BlackholeTime', description='The time period after which blackhole filtering is automatically deactivated in the specified region. Unit: minutes.', example='150'),
    score?: int32(name='Score', description='The security credit score. The full score is **1000**.', example='550'),
    scoreLevel?: string(name='ScoreLevel', description='The security credit level. Valid values:

*   **A**: outstanding
*   **B**: excellent
*   **C**: good
*   **D**: average
*   **E**: poor
*   **F**: poorer', example='D'),
  }(name='DdosCredit', description='The details of the security credit score of the current Alibaba Cloud account in the specified region.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='E1F7BD73-8E9D-58D9-8658-CFC97112C641'),
  success?: boolean(name='Success', description='Indicates whether the request was successful. Valid values:

*   **true**: yes
*   **false**: no', example='true'),
}

model DescribeDdosCreditResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeDdosCreditResponseBody(name='body'),
}

/**
 * @summary Queries the details of the security credit score of the current Alibaba Cloud account in a specific region.
 *
 * @description You can call the DescribeDdosCredit operation to query the details of the security credit score of the current Alibaba Cloud account in a specific region. The details include the security credit score, security credit level, and the time period after which blackhole filtering is automatically deactivated.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosCreditRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeDdosCreditResponse
 */
async function describeDdosCreditWithOptions(request: DescribeDdosCreditRequest, runtime: $RuntimeOptions): DescribeDdosCreditResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeDdosCredit',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the details of the security credit score of the current Alibaba Cloud account in a specific region.
 *
 * @description You can call the DescribeDdosCredit operation to query the details of the security credit score of the current Alibaba Cloud account in a specific region. The details include the security credit score, security credit level, and the time period after which blackhole filtering is automatically deactivated.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosCreditRequest
 * @return DescribeDdosCreditResponse
 */
async function describeDdosCredit(request: DescribeDdosCreditRequest): DescribeDdosCreditResponse {
  var runtime = new $RuntimeOptions{};
  return describeDdosCreditWithOptions(request, runtime);
}

model DescribeDdosEventListRequest {
  currentPage?: int32(name='CurrentPage', description='The number of the page to return. Default value: **1**.', example='1'),
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset to query.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  instanceId?: string(name='InstanceId', description='The ID of asset to query.

> You can call the [DescribeInstance](https://help.aliyun.com/document_detail/354191.html) operation to query the IDs of ECS instances, SLB instances, and EIPs within the current Alibaba Cloud account.

This parameter is required.', example='i-bp10bclrt56fblts****'),
  instanceType?: string(name='InstanceType', description='The type of the asset to query. Valid values:

*   **ecs**: an Elastic Compute Service (ECS) instance.
*   **slb**: a Server Load Balancer (SLB) instance.
*   **eip**: an elastic IP address (EIP).
*   **ipv6**: an IPv6 gateway.
*   **swas**: a simple application server.
*   **waf**: a Web Application Firewall (WAF) instance of the Exclusive edition.
*   **ga_basic**: a Global Accelerator (GA) instance.

This parameter is required.', example='ecs'),
  internetIp?: string(name='InternetIp', description='The IP address of the asset to query.', example='121.199.XX.XX'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: **10**.', example='10'),
}

model DescribeDdosEventListResponseBody = {
  ddosEventList?: {
    ddosEvent?: [ 
    {
      ddosStatus?: string(name='DdosStatus', description='The status of the DDoS attack event. Valid values:

*   **mitigating**: indicates that traffic scrubbing is in progress.
*   **blackholed**: indicates that blackhole filtering is triggered for the asset.
*   **normal**: indicates that the DDoS attack event ends.', example='normal'),
      ddosType?: string(name='DdosType', description='The type of the DDoS attack event. Valid values:

*   **defense**: an attack event that triggers traffic scrubbing
*   **blackhole**: an attack event that triggers blackhole filtering', example='blackhole'),
      delayTime?: long(name='DelayTime', description='The time of the last attack. The value is a UNIX timestamp. Unit: milliseconds.

> This parameter is returned only when the asset is attacked multiple times within a DDoS attack event.', example='1637817679000'),
      endTime?: long(name='EndTime', description='The end time of the DDoS attack event. The value is a UNIX timestamp. Unit: milliseconds.', example='1637817679000'),
      startTime?: long(name='StartTime', description='The start time of the DDoS attack event. The value is a UNIX timestamp. Unit: milliseconds.', example='1637812279000'),
      unBlackholeTime?: long(name='UnBlackholeTime', description='The time when blackhole filtering is deactivated. The value is a UNIX timestamp. Unit: milliseconds.

> This parameter is returned only when the value of the **DdosType** parameter is **blackhole**.', example='1637814079000'),
    }
  ](name='DdosEvent')
  }(name='DdosEventList', description='The details of the DDoS attack events.'),
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='BC0907F8-A9F3-5E11-977B-D59CD98C64ED'),
  total?: int32(name='Total', description='The total number of DDoS attack events.', example='1'),
}

model DescribeDdosEventListResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeDdosEventListResponseBody(name='body'),
}

/**
 * @summary Queries the details of the DDoS attack events that occur on an asset. The asset is assigned a public IP address.
 *
 * @description You can call the DescribeDdosEventList operation to query the details of the DDoS attack events that occur on an asset by page. The details include the start time, end time, and status of each DDoS attack event.
 * ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosEventListRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeDdosEventListResponse
 */
async function describeDdosEventListWithOptions(request: DescribeDdosEventListRequest, runtime: $RuntimeOptions): DescribeDdosEventListResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.currentPage)) {
    query['CurrentPage'] = request.currentPage;
  }
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.internetIp)) {
    query['InternetIp'] = request.internetIp;
  }
  if (!$isNull(request.pageSize)) {
    query['PageSize'] = request.pageSize;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeDdosEventList',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the details of the DDoS attack events that occur on an asset. The asset is assigned a public IP address.
 *
 * @description You can call the DescribeDdosEventList operation to query the details of the DDoS attack events that occur on an asset by page. The details include the start time, end time, and status of each DDoS attack event.
 * ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosEventListRequest
 * @return DescribeDdosEventListResponse
 */
async function describeDdosEventList(request: DescribeDdosEventListRequest): DescribeDdosEventListResponse {
  var runtime = new $RuntimeOptions{};
  return describeDdosEventListWithOptions(request, runtime);
}

model DescribeDdosThresholdRequest {
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  ddosType?: string(name='DdosType', description='The type of the threshold. Valid values:

*   **defense**: traffic scrubbing threshold
*   **blackhole**: DDoS mitigation threshold

This parameter is required.', example='defense'),
  instanceIds?: [ string ](name='InstanceIds', description='The ID of asset N to query.

This parameter is required.'),
  instanceType?: string(name='InstanceType', description='The type of the asset that is assigned a public IP address. Valid values:

*   **ecs**: ECS instances.
*   **slb**: SLB instances.
*   **eip**: EIPs.
*   **ipv6**: IPv6 gateways.
*   **swas**: simple application servers.
*   **waf**: Web Application Firewall (WAF) instances of the Exclusive edition.
*   **ga_basic**: Global Accelerator (GA) instances.

This parameter is required.', example='ecs'),
}

model DescribeDdosThresholdResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='E9B3C090-55AD-59C6-979E-FCFD81E7D9E7'),
  thresholds?: {
    threshold?: [ 
    {
      bps?: int32(name='Bps', description='If the value of the **DdosType** parameter is **defense**, the Bps parameter indicates the current traffic scrubbing threshold. Unit: Mbit/s.

If the value of the **DdosType** parameter is **blackhole**, the Bps parameter indicates the basic protection threshold. Unit: Mbit/s.', example='500'),
      ddosType?: string(name='DdosType', description='The type of the threshold. Valid values:

*   **defense**: traffic scrubbing threshold
*   **blackhole**: DDoS mitigation threshold', example='defense'),
      elasticBps?: int32(name='ElasticBps', description='The burstable protection threshold (the maximum DDoS mitigation threshold). Unit: Mbit/s.

> This parameter is returned only when the value of the **DdosType** parameter is **blackhole**.', example='12310'),
      instanceId?: string(name='InstanceId', description='The ID of the instance.', example='i-bp10bclrt56fblts****'),
      internetIp?: string(name='InternetIp', description='The IP address of the asset.', example='192.0.XX.XX'),
      isAuto?: boolean(name='IsAuto', description='Indicates whether the threshold is automatically adjusted. Valid values:

*   **true**: The scrubbing thresholds are automatically adjusted based on the traffic load on the asset.
*   **false**: The scrubbing thresholds are not automatically adjusted. You must manually specify the scrubbing thresholds.', example='false'),
      maxBps?: int32(name='MaxBps', description='The maximum traffic scrubbing threshold. Unit: Mbit/s.', example='1024'),
      maxPps?: int32(name='MaxPps', description='The maximum packet scrubbing threshold. Unit: pps.', example='150000'),
      pps?: int32(name='Pps', description='The packet scrubbing threshold. Unit: pps.

> This parameter is returned only when the value of the **DdosType** parameter is **defense**.', example='150000'),
    }
  ](name='Threshold')
  }(name='Thresholds', description='An array that consists of the details of the threshold.'),
}

model DescribeDdosThresholdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeDdosThresholdResponseBody(name='body'),
}

/**
 * @summary Queries the details of the DDoS mitigation thresholds or traffic scrubbing thresholds for specified assets. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses.
 *
 * @description You can call the DescribeDdosThreshold operation to query the details of the DDoS mitigation thresholds or traffic scrubbing thresholds for specified assets. The details include the current traffic scrubbing threshold, maximum traffic scrubbing threshold, current DDoS mitigation threshold, and maximum DDoS mitigation threshold.
 * ### Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosThresholdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeDdosThresholdResponse
 */
async function describeDdosThresholdWithOptions(request: DescribeDdosThresholdRequest, runtime: $RuntimeOptions): DescribeDdosThresholdResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.ddosType)) {
    query['DdosType'] = request.ddosType;
  }
  if (!$isNull(request.instanceIds)) {
    query['InstanceIds'] = request.instanceIds;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeDdosThreshold',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the details of the DDoS mitigation thresholds or traffic scrubbing thresholds for specified assets. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses.
 *
 * @description You can call the DescribeDdosThreshold operation to query the details of the DDoS mitigation thresholds or traffic scrubbing thresholds for specified assets. The details include the current traffic scrubbing threshold, maximum traffic scrubbing threshold, current DDoS mitigation threshold, and maximum DDoS mitigation threshold.
 * ### Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeDdosThresholdRequest
 * @return DescribeDdosThresholdResponse
 */
async function describeDdosThreshold(request: DescribeDdosThresholdRequest): DescribeDdosThresholdResponse {
  var runtime = new $RuntimeOptions{};
  return describeDdosThresholdWithOptions(request, runtime);
}

model DescribeInstanceRequest {
  currentPage?: int32(name='CurrentPage', description='The number of the page to return. Default value: **1**.', example='1'),
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  ddosStatus?: string(name='DdosStatus', description='The DDoS mitigation status of the asset. Valid values:

*   **mitigating**: queries assets for which traffic scrubbing is triggered.
*   **blackholed**: queries assets for which blackhole filtering is triggered.
*   **normal**: queries assets that are not under DDoS attacks.', example='blackholed'),
  instanceId?: string(name='InstanceId', description='The ID of the asset. The formats of asset IDs vary based on the value of the **InstanceType**. parameter.

*   If you set **InstanceType** to **ecs**, specify the ID of the ECS instance. For example, you can specify i-bp1cb6x80tfgocid\\\\*\\\\*\\\\*\\\\*.
*   If you set **InstanceType** to **slb**, specify the ID of the SLB instance. For example, you can specify alb-vn2dqg3v31y2vd\\\\*\\\\*\\\\*\\\\*.
*   If you set **InstanceType** to **eip**, specify the ID of the EIP. For example, you can specify eip-j6ce6dcx9epi7rs46\\\\*\\\\*\\\\*\\\\*.', example='i-bp1cb6x80tfgocid****'),
  instanceIp?: string(name='InstanceIp', description='The IP address of the asset.', example='121.199.XX.XX'),
  instanceName?: string(name='InstanceName', description='The name of the asset.', example='launch-advisor-2022****'),
  instanceType?: string(name='InstanceType', description='The type of the asset to query. Valid values:

*   **ecs**: ECS instances.
*   **slb**: SLB instances.
*   **eip**: EIPs.
*   **ipv6**: IPv6 gateways.
*   **swas**: simple application servers.
*   **waf**: Web Application Firewall (WAF) instances of the Exclusive edition.
*   **ga_basic**: Global Accelerator (GA) instances.

This parameter is required.', example='ecs'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: **10**.', example='10'),
}

model DescribeInstanceResponseBody = {
  instanceList?: {
    instance?: [ 
    {
      blackholeThreshold?: int32(name='BlackholeThreshold', description='The basic protection threshold for the asset. Unit: Mbit/s.', example='5200'),
      defenseBpsThreshold?: int32(name='DefenseBpsThreshold', description='The traffic scrubbing threshold for the asset. Unit: Mbit/s.', example='300'),
      defensePpsThreshold?: int32(name='DefensePpsThreshold', description='The packet scrubbing threshold for the asset. Unit: packets per second (pps).', example='70000'),
      elasticThreshold?: int32(name='ElasticThreshold', description='The burstable protection threshold for the asset. Unit: Mbit/s.', example='12310'),
      instanceId?: string(name='InstanceId', description='The ID of the asset.', example='i-bp1cb6x80tfgocid****'),
      instanceIp?: string(name='InstanceIp', description='The IP address of the asset.', example='121.199.XX.XX'),
      instanceName?: string(name='InstanceName', description='The name of the asset.', example='launch-advisor-2021****'),
      instanceStatus?: string(name='InstanceStatus', description='The DDoS mitigation status of the asset. Valid values:

*   **mitigating**: indicates that traffic scrubbing is triggered for the asset.
*   **blackholed**: indicates that blackhole filtering is triggered for the asset.
*   **normal**: indicates that the instance is normal.', example='normal'),
      instanceType?: string(name='InstanceType', description='The type of the asset.', example='ecs'),
      ipVersion?: string(name='IpVersion', description='The IP protocol that is supported by the asset. Valid values:

*   **v4**: IPv4
*   **v6**: IPv6', example='v4'),
      isBgppack?: boolean(name='IsBgppack', description='Indicates whether the asset is associated with an Anti-DDoS Origin Basic instance. Valid values:

*   **true**: yes
*   **false**: no', example='false'),
    }
  ](name='Instance')
  }(name='InstanceList', description='The details of the assets.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='C728D7E9-9A39-52E0-966B-5C33118BDBB0'),
  total?: int32(name='Total', description='The total number of the assets.', example='1'),
}

model DescribeInstanceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeInstanceResponseBody(name='body'),
}

/**
 * @summary Queries the details of the assets within the current Alibaba Cloud account. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses. This operation is phased out. We recommend that you use the DescribeInstanceIpAddress operation.
 *
 * @description You can call the DescribeInstance operation to query the details of the assets that are within the current Alibaba Cloud account by page. The details include the IDs and IP addresses of the assets, the basic protection thresholds and traffic scrubbing thresholds that are configured for the assets in Anti-DDoS Origin, and whether the assets are associated with Anti-DDoS Origin instances.
 * ### [](#qps-)Limits
 * You can call this operation up to 200 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeInstanceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeInstanceResponse
 */
async function describeInstanceWithOptions(request: DescribeInstanceRequest, runtime: $RuntimeOptions): DescribeInstanceResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.currentPage)) {
    query['CurrentPage'] = request.currentPage;
  }
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.ddosStatus)) {
    query['DdosStatus'] = request.ddosStatus;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceIp)) {
    query['InstanceIp'] = request.instanceIp;
  }
  if (!$isNull(request.instanceName)) {
    query['InstanceName'] = request.instanceName;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.pageSize)) {
    query['PageSize'] = request.pageSize;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeInstance',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the details of the assets within the current Alibaba Cloud account. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses. This operation is phased out. We recommend that you use the DescribeInstanceIpAddress operation.
 *
 * @description You can call the DescribeInstance operation to query the details of the assets that are within the current Alibaba Cloud account by page. The details include the IDs and IP addresses of the assets, the basic protection thresholds and traffic scrubbing thresholds that are configured for the assets in Anti-DDoS Origin, and whether the assets are associated with Anti-DDoS Origin instances.
 * ### [](#qps-)Limits
 * You can call this operation up to 200 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeInstanceRequest
 * @return DescribeInstanceResponse
 */
async function describeInstance(request: DescribeInstanceRequest): DescribeInstanceResponse {
  var runtime = new $RuntimeOptions{};
  return describeInstanceWithOptions(request, runtime);
}

model DescribeInstanceIpAddressRequest {
  currentPage?: int32(name='CurrentPage', description='The number of the page to return. Default value: **1**.', example='1'),
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  ddosStatus?: string(name='DdosStatus', description='The DDoS mitigation status of the asset. Valid values:

*   **defense**: queries assets for which traffic scrubbing is performed.
*   **blackhole**: queries assets for which blackhole filtering is triggered.', example='normal'),
  instanceId?: string(name='InstanceId', description='The ID of the instance to which the asset is added.', example='i-bp1cb6x80tfgocid****'),
  instanceIp?: string(name='InstanceIp', description='The IP address of the asset.', example='192.0.XX.XX'),
  instanceName?: string(name='InstanceName', description='The name of the asset.', example='launch-advisor-2021****'),
  instanceType?: string(name='InstanceType', description='The type of the asset that is assigned a public IP address. Valid values:

*   **ecs**: ECS instances.
*   **slb**: SLB instances.
*   **eip**: EIPs.
*   **ipv6**: IPv6 gateways.
*   **swas**: simple application servers.
*   **waf**: Web Application Firewall (WAF) instances of the Exclusive edition.
*   **ga_basic**: Global Accelerator (GA) instances.

This parameter is required.', example='ecs'),
  pageSize?: int32(name='PageSize', description='The number of entries to return on each page. Default value: **10**.', example='10'),
}

model DescribeInstanceIpAddressResponseBody = {
  instanceList?: [ 
    {
      instanceId?: string(name='InstanceId', description='The ID of the instance.', example='i-bp1cb6x80tfgocid****'),
      instanceName?: string(name='InstanceName', description='The name of the instance.', example='launch-advisor-2021****'),
      instanceStatus?: string(name='InstanceStatus', description='The DDoS mitigation status of the instance. Valid values:

*   **normal**: not under DDoS attacks.
*   **abnormal**: under DDoS attacks.', example='normal'),
      instanceType?: string(name='InstanceType', description='The type of the asset. Valid values:

*   **ecs**
*   **slb**
*   **eip**', example='ecs'),
      ipAddressConfig?: [ 
        {
          blackholeThreshold?: int32(name='BlackholeThreshold', description='The basic protection threshold for the asset. Unit: Mbit/s.', example='5200'),
          defenseBpsThreshold?: int32(name='DefenseBpsThreshold', description='The traffic scrubbing threshold for the asset measured in Mbit/s. Unit: Mbit/s.', example='300'),
          defensePpsThreshold?: int32(name='DefensePpsThreshold', description='The traffic scrubbing threshold for the asset measured in packets per second (PPS). Unit: PPS.', example='70000'),
          elasticThreshold?: int32(name='ElasticThreshold', description='The burstable protection threshold for the asset. Unit: Mbit/s.', example='12310'),
          instanceIp?: string(name='InstanceIp', description='The IP address of the asset.', example='192.0.XX.XX'),
          ipStatus?: string(name='IpStatus', description='The DDoS mitigation status of the asset. Valid values:

*   **mitigating**: indicates that traffic scrubbing is in progress.
*   **blackholed**: indicates that blackhole filtering is triggered for the asset.
*   **normal**: indicates that no DDoS attacks are launched against the asset.', example='normal'),
          ipVersion?: string(name='IpVersion', description='The IP version of the IP address. Valid values:

*   **v4**: IPv4.
*   **v6**: IPv6.', example='v4'),
          isBgppack?: boolean(name='IsBgppack', description='Indicates whether the asset is added to the instance. Valid values:

*   **true**
*   **false**', example='true'),
          isFullProtection?: int32(name='IsFullProtection', description='Indicates whether best-effort protection is enabled for the asset. Valid values:

*   **0**: no.
*   **1**: yes.', example='0'),
          regionId?: string(name='RegionId', description='The region code of the asset.', example='cn-hangzhou-dg-a01'),
        }
      ](name='IpAddressConfig', description='An array that consists of the details of the asset.'),
    }
  ](name='InstanceList', description='An array that consists of details of the instance.'),
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='BC0907F8-A9F3-5E11-977B-D59CD98C64ED'),
  total?: int32(name='Total', description='The total number of the assets.', example='1'),
}

model DescribeInstanceIpAddressResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeInstanceIpAddressResponseBody(name='body'),
}

/**
 * @summary Queries the details of the assets within the current Alibaba Cloud account and the details of the Anti-DDoS Origin instance to which the assets belong. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses.
 *
 * @description If one or more assets of the current Alibaba Cloud account are added to an Anti-DDoS Origin instance, you can call the DescribeInstanceIpAddress operation to query the DDoS mitigation information and the details of the Anti-DDoS Origin instance. The information and the details include the basic protection threshold and traffic scrubbing threshold for the assets, DDoS mitigation status of the assets, ID of the instance, and the mitigation status of the instance.
 * ## Limits
 * You can call this operation up to 200 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeInstanceIpAddressRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeInstanceIpAddressResponse
 */
async function describeInstanceIpAddressWithOptions(request: DescribeInstanceIpAddressRequest, runtime: $RuntimeOptions): DescribeInstanceIpAddressResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.currentPage)) {
    query['CurrentPage'] = request.currentPage;
  }
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.ddosStatus)) {
    query['DdosStatus'] = request.ddosStatus;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceIp)) {
    query['InstanceIp'] = request.instanceIp;
  }
  if (!$isNull(request.instanceName)) {
    query['InstanceName'] = request.instanceName;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.pageSize)) {
    query['PageSize'] = request.pageSize;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeInstanceIpAddress',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the details of the assets within the current Alibaba Cloud account and the details of the Anti-DDoS Origin instance to which the assets belong. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses.
 *
 * @description If one or more assets of the current Alibaba Cloud account are added to an Anti-DDoS Origin instance, you can call the DescribeInstanceIpAddress operation to query the DDoS mitigation information and the details of the Anti-DDoS Origin instance. The information and the details include the basic protection threshold and traffic scrubbing threshold for the assets, DDoS mitigation status of the assets, ID of the instance, and the mitigation status of the instance.
 * ## Limits
 * You can call this operation up to 200 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeInstanceIpAddressRequest
 * @return DescribeInstanceIpAddressResponse
 */
async function describeInstanceIpAddress(request: DescribeInstanceIpAddressRequest): DescribeInstanceIpAddressResponse {
  var runtime = new $RuntimeOptions{};
  return describeInstanceIpAddressWithOptions(request, runtime);
}

model DescribeIpDdosThresholdRequest {
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  ddosType?: string(name='DdosType', description='The type of the threshold. Valid values:

*   **defense**: traffic scrubbing threshold
*   **blackhole**: DDoS mitigation threshold

This parameter is required.', example='defense'),
  instanceId?: string(name='InstanceId', description='The ID of the asset.

> You can call the [DescribeInstanceIpAddress](https://help.aliyun.com/document_detail/429562.html) operation to query the IDs of ECS instances, SLB instances, and EIPs within the current Alibaba Cloud account.

This parameter is required.', example='i-bp1i88rqjza51s****'),
  instanceType?: string(name='InstanceType', description='The type of the asset that is assigned a public IP address. Valid values:

*   **ecs**: ECS instances.
*   **slb**: SLB instances.
*   **eip**: EIPs.
*   **ipv6**: IPv6 gateways.
*   **swas**: simple application servers.
*   **waf**: Web Application Firewall (WAF) instances of the Exclusive edition.
*   **ga_basic**: Global Accelerator (GA) instances.

This parameter is required.', example='ecs'),
  internetIp?: string(name='InternetIp', description='The IP address of the asset.

This parameter is required.', example='192.0.XX.XX'),
}

model DescribeIpDdosThresholdResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='025F1688-680B-551A-9A8E-1A0D796315CF'),
  threshold?: {
    bps?: int32(name='Bps', description='If the value of the **DdosType** parameter is **defense**, the Bps parameter indicates the current traffic scrubbing threshold. Unit: Mbit/s.

If the value of the **DdosType** parameter is **blackhole**, the Bps parameter indicates the basic protection threshold. Unit: Mbit/s.', example='7500'),
    ddosType?: string(name='DdosType', description='The type of the threshold. Valid values:

*   **defense**: traffic scrubbing threshold
*   **blackhole**: DDoS mitigation threshold', example='defense'),
    elasticBps?: int32(name='ElasticBps', description='The burstable protection threshold (the maximum DDoS mitigation threshold). Unit: Mbit/s.

> This parameter is returned only when the value of the **DdosType** parameter is **blackhole**.', example='12310'),
    instanceId?: string(name='InstanceId', description='The ID of the instance.', example='i-bp1i88rqjza51s****'),
    internetIp?: string(name='InternetIp', description='The IP address of the asset.', example='192.0.XX.XX'),
    isAuto?: boolean(name='IsAuto', description='Indicates whether the threshold is automatically adjusted. Valid values:

*   **true**: The scrubbing thresholds are automatically adjusted based on the traffic load on the asset.
*   **false**: The scrubbing thresholds are not automatically adjusted. You must manually specify the scrubbing thresholds.', example='false'),
    maxBps?: int32(name='MaxBps', description='The maximum traffic scrubbing threshold. Unit: Mbit/s.', example='7500'),
    maxPps?: int32(name='MaxPps', description='The maximum packet scrubbing threshold. Unit: pps.', example='5000000'),
    pps?: int32(name='Pps', description='The packet scrubbing threshold. Unit: packets per second (pps).

> This parameter is returned only when the value of the **DdosType** parameter is **defense**.', example='5000000'),
  }(name='Threshold', description='An array that consists of the details of the threshold.'),
}

model DescribeIpDdosThresholdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeIpDdosThresholdResponseBody(name='body'),
}

/**
 * @summary Queries the details of the DDoS mitigation thresholds or traffic scrubbing thresholds for specified assets. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses.
 *
 * @description If one or more assets of the current Alibaba Cloud account are added to an Anti-DDoS Origin instance, you can call the DescribeIpDdosThreshold operation to query the details of the DDoS mitigation threshold or traffic scrubbing threshold for a specific asset. The details include the current traffic scrubbing threshold, maximum scrubbing threshold, current DDoS mitigation threshold, and maximum DDoS mitigation threshold.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeIpDdosThresholdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeIpDdosThresholdResponse
 */
async function describeIpDdosThresholdWithOptions(request: DescribeIpDdosThresholdRequest, runtime: $RuntimeOptions): DescribeIpDdosThresholdResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.ddosType)) {
    query['DdosType'] = request.ddosType;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.internetIp)) {
    query['InternetIp'] = request.internetIp;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeIpDdosThreshold',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the details of the DDoS mitigation thresholds or traffic scrubbing thresholds for specified assets. The assets can be elastic IP addresses (EIPs). The assets can also be Elastic Compute Service (ECS) instances or Server Load Balancer (SLB) instances that are assigned public IP addresses.
 *
 * @description If one or more assets of the current Alibaba Cloud account are added to an Anti-DDoS Origin instance, you can call the DescribeIpDdosThreshold operation to query the details of the DDoS mitigation threshold or traffic scrubbing threshold for a specific asset. The details include the current traffic scrubbing threshold, maximum scrubbing threshold, current DDoS mitigation threshold, and maximum DDoS mitigation threshold.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeIpDdosThresholdRequest
 * @return DescribeIpDdosThresholdResponse
 */
async function describeIpDdosThreshold(request: DescribeIpDdosThresholdRequest): DescribeIpDdosThresholdResponse {
  var runtime = new $RuntimeOptions{};
  return describeIpDdosThresholdWithOptions(request, runtime);
}

model DescribeIpLocationServiceRequest {
  internetIp?: string(name='InternetIp', description='The IP address of the asset to query.

This parameter is required.', example='121.199.XX.XX'),
}

model DescribeIpLocationServiceResponseBody = {
  instance?: {
    instanceId?: string(name='InstanceId', description='The ID of the instance.', example='i-bp1cb6x80tfgocid****'),
    instanceName?: string(name='InstanceName', description='The name of the instance.', example='launch-advisor-2021****'),
    instanceType?: string(name='InstanceType', description='The type of the asset. Valid values:

*   **ecs**: an ECS instance.
*   **slb**: an SLB instance.
*   **eip**: an EIP.
*   **ipv6**: an IPv6 gateway.
*   **swas**: a simple application server.
*   **waf**: a Web Application Firewall (WAF) instance of the Exclusive edition.
*   **ga_basic**: a Global Accelerator (GA) instance.', example='ecs'),
    internetIp?: string(name='InternetIp', description='The IP address of the asset.', example='121.199.XX.XX'),
    region?: string(name='Region', description='The region to which the public IP address of the asset belongs.', example='cn-hangzhou'),
  }(name='Instance', description='The details of the asset.'),
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='C728D7E9-9A39-52E0-966B-5C33118BDBB0'),
}

model DescribeIpLocationServiceResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeIpLocationServiceResponseBody(name='body'),
}

/**
 * @summary Queries the region to which the public IP address of the asset within the current Alibaba Cloud account belongs. The asset can be an elastic IP address (EIP). The asset can also be an Elastic Compute Service (ECS) instance or Server Load Balancer (SLB) instance that is assigned a public IP address.
 *
 * @description You can call the DescribeIpLocationService operation to query the region of the public IP address for a specified asset that is within the current Alibaba Cloud account. You can also query the details of the Anti-DDoS Origin instance to which the asset is added. The details include the ID and name.
 * ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeIpLocationServiceRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeIpLocationServiceResponse
 */
async function describeIpLocationServiceWithOptions(request: DescribeIpLocationServiceRequest, runtime: $RuntimeOptions): DescribeIpLocationServiceResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.internetIp)) {
    query['InternetIp'] = request.internetIp;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'DescribeIpLocationService',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the region to which the public IP address of the asset within the current Alibaba Cloud account belongs. The asset can be an elastic IP address (EIP). The asset can also be an Elastic Compute Service (ECS) instance or Server Load Balancer (SLB) instance that is assigned a public IP address.
 *
 * @description You can call the DescribeIpLocationService operation to query the region of the public IP address for a specified asset that is within the current Alibaba Cloud account. You can also query the details of the Anti-DDoS Origin instance to which the asset is added. The details include the ID and name.
 * ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeIpLocationServiceRequest
 * @return DescribeIpLocationServiceResponse
 */
async function describeIpLocationService(request: DescribeIpLocationServiceRequest): DescribeIpLocationServiceResponse {
  var runtime = new $RuntimeOptions{};
  return describeIpLocationServiceWithOptions(request, runtime);
}

model DescribeRegionsResponseBody = {
  regions?: {
    region?: [ 
    {
      regionEnName?: string(name='RegionEnName', description='The English name of the region.', example='East China 1'),
      regionName?: string(name='RegionName', description='The Chinese name of the region.', example='China (Hangzhou)'),
      regionNo?: string(name='RegionNo', description='The code of the region.', example='cn-hangzhou-dg-a01'),
      regionNoAlias?: string(name='RegionNoAlias', description='The ID of the region.', example='cn-hangzhou'),
    }
  ](name='Region')
  }(name='Regions', description='An array consisting of regions in which Anti-DDoS Origin Basic is available.'),
  requestId?: string(name='RequestId', description='The ID of the request.', example='5093C7EE-8E27-5FC9-9B88-40626BA540C0'),
}

model DescribeRegionsResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: DescribeRegionsResponseBody(name='body'),
}

/**
 * @summary Queries the regions in which Anti-DDoS Origin Basic is available.
 *
 * @description You can call this operation to query information about the regions in which Anti-DDoS Origin Basic is available. The information includes the region ID, region name, and code.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request DescribeRegionsRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return DescribeRegionsResponse
 */
async function describeRegionsWithOptions(runtime: $RuntimeOptions): DescribeRegionsResponse {
  var req = new OpenApiUtil.OpenApiRequest{};
  var params = new OpenApiUtil.Params{
    action = 'DescribeRegions',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Queries the regions in which Anti-DDoS Origin Basic is available.
 *
 * @description You can call this operation to query information about the regions in which Anti-DDoS Origin Basic is available. The information includes the region ID, region name, and code.
 * ## Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @return DescribeRegionsResponse
 */
async function describeRegions(): DescribeRegionsResponse {
  var runtime = new $RuntimeOptions{};
  return describeRegionsWithOptions(runtime);
}

model ModifyDefenseThresholdRequest {
  bps?: int32(name='Bps', description='The traffic scrubbing threshold. Unit: Mbit/s. The traffic scrubbing threshold cannot exceed the peak inbound or outbound Internet traffic, whichever is larger, of the asset. When you modify Bps, Pps is required. Otherwise, Bps does not take effect.

You can use the monitoring tool that is provided by the asset to query the Internet traffic of the asset:

*   If the asset is an ECS instance, see [View instance monitoring information](https://help.aliyun.com/document_detail/25482.html).
*   If the asset is an SLB instance, see [View monitoring data](https://help.aliyun.com/document_detail/85982.html).', example='100'),
  clientToken?: string(name='ClientToken'),
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset for which you want to change the scrubbing thresholds.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  instanceId?: string(name='InstanceId', description='The ID of the asset.

> You can call the [DescribeInstance](https://help.aliyun.com/document_detail/354191.html) operation to query the IDs of ECS instances, SLB instances, and EIPs within the current Alibaba Cloud account.

This parameter is required.', example='i-uf6idy3c57psf7vu****'),
  instanceType?: string(name='InstanceType', description='The type of the asset. Valid values:

*   **ecs**: an Elastic Compute Service (ECS) instance.
*   **slb**: a Server Load Balancer (SLB) instance.
*   **eip**: an elastic IP address (EIP).
*   **ipv6**: an IPv6 gateway.
*   **swas**: a simple application server.
*   **waf**: a Web Application Firewall (WAF) instance of the Exclusive edition.
*   **ga_basic**: a Global Accelerator (GA) instance.

This parameter is required.', example='ecs'),
  internetIp?: string(name='InternetIp', description='The IP address of the asset.', example='192.0.XX.XX'),
  isAuto?: boolean(name='IsAuto', description='Specifies whether to automatically adjust the scrubbing threshold based on the traffic load on the asset. Valid values:

*   **true**: automatically adjusts the scrubbing thresholds. You do not need to configure the **Bps** and **Pps** parameters.
*   **false**: The scrubbing threshold is not automatically adjusted. You must configure the **Bps** and **Pps** parameters.

Default value: false.', example='false'),
  pps?: int32(name='Pps', description='The packet scrubbing threshold. Unit: packets per second (PPS). When you modify Pps, Bps is required. Otherwise, Pps does not take effect.

The packet scrubbing threshold cannot exceed the peak number of inbound or outbound packets, whichever is larger, of the asset. You can use the monitoring tool that is provided by the asset to query the number of packets of the asset:

*   If the asset is an ECS instance, see [View instance monitoring information](https://help.aliyun.com/document_detail/25482.html).
*   If the asset is an SLB instance, see [View monitoring data](https://help.aliyun.com/document_detail/85982.html).', example='70000'),
}

model ModifyDefenseThresholdResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='BC0607F8-A9F3-5E11-977B-D59CD58C64ED'),
}

model ModifyDefenseThresholdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ModifyDefenseThresholdResponseBody(name='body'),
}

/**
 * @summary Changes the scrubbing thresholds for an asset that is assigned a public IP address.
 *
 * @description ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request ModifyDefenseThresholdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ModifyDefenseThresholdResponse
 */
async function modifyDefenseThresholdWithOptions(request: ModifyDefenseThresholdRequest, runtime: $RuntimeOptions): ModifyDefenseThresholdResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.bps)) {
    query['Bps'] = request.bps;
  }
  if (!$isNull(request.clientToken)) {
    query['ClientToken'] = request.clientToken;
  }
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.internetIp)) {
    query['InternetIp'] = request.internetIp;
  }
  if (!$isNull(request.isAuto)) {
    query['IsAuto'] = request.isAuto;
  }
  if (!$isNull(request.pps)) {
    query['Pps'] = request.pps;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ModifyDefenseThreshold',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Changes the scrubbing thresholds for an asset that is assigned a public IP address.
 *
 * @description ## [](#qps-)Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request ModifyDefenseThresholdRequest
 * @return ModifyDefenseThresholdResponse
 */
async function modifyDefenseThreshold(request: ModifyDefenseThresholdRequest): ModifyDefenseThresholdResponse {
  var runtime = new $RuntimeOptions{};
  return modifyDefenseThresholdWithOptions(request, runtime);
}

model ModifyIpDefenseThresholdRequest {
  bps?: int32(name='Bps', description='The traffic scrubbing threshold. Unit: Mbit/s. The traffic scrubbing threshold cannot exceed the peak inbound or outbound Internet traffic, whichever is larger, of the asset. When you modify Bps, Pps is required. Otherwise, Bps does not take effect.

You can use the monitoring tool that is provided by the asset to query the Internet traffic of the asset:

*   If the asset is an ECS instance, see [View instance monitoring information](https://help.aliyun.com/document_detail/25482.html).
*   If the asset is an SLB instance, see [View monitoring data](https://help.aliyun.com/document_detail/85982.html).
*   If the asset is an EIP, see [View monitoring data](https://help.aliyun.com/document_detail/85354.html).', example='100'),
  ddosRegionId?: string(name='DdosRegionId', description='The region ID of the asset.

> You can call the [DescribeRegions](https://help.aliyun.com/document_detail/353250.html) operation to query the most recent region list.

This parameter is required.', example='cn-hangzhou'),
  instanceId?: string(name='InstanceId', description='The ID of the asset.

> You can call the [DescribeInstance](https://help.aliyun.com/document_detail/354191.html) operation to query the IDs of ECS instances, SLB instances, and EIPs within the current Alibaba Cloud account.

This parameter is required.', example='i-uf6idy3c57psf7vu****'),
  instanceType?: string(name='InstanceType', description='The type of the asset. Valid values:

*   **ecs**: an Elastic Compute Service (ECS) instance.
*   **slb**: a Server Load Balancer (SLB) instance.
*   **eip**: an elastic IP address (EIP).
*   **ipv6**: an IPv6 gateway.
*   **swas**: a simple application server.
*   **waf**: a Web Application Firewall (WAF) instance of the Exclusive edition.
*   **ga_basic**: a Global Accelerator (GA) instance.

This parameter is required.', example='ecs'),
  internetIp?: string(name='InternetIp', description='The IP address of the asset.

This parameter is required.', example='192.0.XX.XX'),
  isAuto?: boolean(name='IsAuto', description='Specifies whether to automatically adjust the scrubbing threshold based on the traffic load on the asset. Valid values:

*   **true**: automatically adjusts the scrubbing threshold. You do not need to configure the **Bps** and **Pps** parameters.
*   **false**: The scrubbing threshold is not automatically adjusted. You must configure the **Bps** and **Pps** parameters. This is the default value.', example='false'),
  pps?: int32(name='Pps', description='The packet scrubbing threshold. Unit: packets per second (PPS). When you modify Pps, Bps is required. Otherwise, Pps does not take effect.

The packet scrubbing threshold cannot exceed the peak number of inbound or outbound packets, whichever is larger, of the asset. You can use the monitoring tool that is provided by the asset to query the number of packets of the asset:

*   If the asset is an ECS instance, see [View instance monitoring information](https://help.aliyun.com/document_detail/25482.html).
*   If the asset is an SLB instance, see [View monitoring data](https://help.aliyun.com/document_detail/85982.html).
*   If the asset is an EIP, see [View monitoring data](https://help.aliyun.com/document_detail/85354.html).', example='70000'),
}

model ModifyIpDefenseThresholdResponseBody = {
  requestId?: string(name='RequestId', description='The ID of the request, which is used to locate and troubleshoot issues.', example='BC0607F8-A9F3-5E11-977B-D59CD58C64ED'),
}

model ModifyIpDefenseThresholdResponse = {
  headers?: map[string]string(name='headers'),
  statusCode?: int32(name='statusCode'),
  body?: ModifyIpDefenseThresholdResponseBody(name='body'),
}

/**
 * @summary Modifies the scrubbing thresholds for an asset that is assigned a public IP address. This operation is a synchronous operation that supports Terraform.
 *
 * @description ### Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request ModifyIpDefenseThresholdRequest
 * @param runtime runtime options for this request RuntimeOptions
 * @return ModifyIpDefenseThresholdResponse
 */
async function modifyIpDefenseThresholdWithOptions(request: ModifyIpDefenseThresholdRequest, runtime: $RuntimeOptions): ModifyIpDefenseThresholdResponse {
  request.validate();
  var query = {};
  if (!$isNull(request.bps)) {
    query['Bps'] = request.bps;
  }
  if (!$isNull(request.ddosRegionId)) {
    query['DdosRegionId'] = request.ddosRegionId;
  }
  if (!$isNull(request.instanceId)) {
    query['InstanceId'] = request.instanceId;
  }
  if (!$isNull(request.instanceType)) {
    query['InstanceType'] = request.instanceType;
  }
  if (!$isNull(request.internetIp)) {
    query['InternetIp'] = request.internetIp;
  }
  if (!$isNull(request.isAuto)) {
    query['IsAuto'] = request.isAuto;
  }
  if (!$isNull(request.pps)) {
    query['Pps'] = request.pps;
  }
  var req = new OpenApiUtil.OpenApiRequest{ 
    query = OpenApiUtil.query(query),
  };
  var params = new OpenApiUtil.Params{
    action = 'ModifyIpDefenseThreshold',
    version = '2017-05-18',
    protocol = 'HTTPS',
    pathname = '/',
    method = 'POST',
    authType = 'AK',
    style = 'RPC',
    reqBodyType = 'formData',
    bodyType = 'json',
  };
  if ($isNull(@signatureVersion) || @signatureVersion != 'v4') {
    return callApi(params, req, runtime);
  } else {
    return execute(params, req, runtime);
  }
}

/**
 * @summary Modifies the scrubbing thresholds for an asset that is assigned a public IP address. This operation is a synchronous operation that supports Terraform.
 *
 * @description ### Limits
 * You can call this operation up to 10 times per second per account. If the number of the calls per second exceeds the limit, throttling is triggered. As a result, your business may be affected. We recommend that you take note of the limit when you call this operation.
 *
 * @param request ModifyIpDefenseThresholdRequest
 * @return ModifyIpDefenseThresholdResponse
 */
async function modifyIpDefenseThreshold(request: ModifyIpDefenseThresholdRequest): ModifyIpDefenseThresholdResponse {
  var runtime = new $RuntimeOptions{};
  return modifyIpDefenseThresholdWithOptions(request, runtime);
}

